//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.xiaobai.common.utils.tool;

import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

public class Safes {
    public Safes() {
    }

    public static <K, V> Map<K, V> of(Map<K, V> source) {
        return (Map)Optional.ofNullable(source).orElse(Maps.newHashMapWithExpectedSize(0));
    }

    public static <T> Iterator<T> of(Iterator<T> source) {
        return (Iterator)Optional.ofNullable(source).orElse((Iterator<T>) Lists.newArrayListWithCapacity(0).iterator());
    }

    public static <T> Collection<T> of(Collection<T> source) {
        return (Collection)Optional.ofNullable(source).orElse(Lists.newArrayListWithCapacity(0));
    }

    public static <T> Iterable<T> of(Iterable<T> source) {
        return (Iterable)Optional.ofNullable(source).orElse(Lists.newArrayListWithCapacity(0));
    }

    public static <T> List<T> of(List<T> source) {
        return (List)Optional.ofNullable(source).orElse(Lists.newArrayListWithCapacity(0));
    }

    public static <T> Set<T> of(Set<T> source) {
        return (Set)Optional.ofNullable(source).orElse(Sets.newHashSetWithExpectedSize(0));
    }

    public static BigDecimal of(BigDecimal source) {
        return (BigDecimal)Optional.ofNullable(source).orElse(BigDecimal.ZERO);
    }

    public static String of(String source) {
        return (String)Optional.ofNullable(source).orElse("");
    }

    public static String of(String source, String defaultStr) {
        return (String)Optional.ofNullable(source).orElse(defaultStr);
    }

    public static <T> T first(Collection<T> source) {
        if (CollectionUtil.isEmpty(source)) {
            return null;
        } else {
            T t = null;
            Iterator<T> iterator = source.iterator();
            if (iterator.hasNext()) {
                t = iterator.next();
            }

            return t;
        }
    }

    static String trim(String str) {
        return str == null ? "" : str.trim();
    }
}